<?php


namespace App\Http\Controllers\Mp;


use App\Http\Controllers\Controller;
use App\Utils\Result;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class UploadController extends Controller
{
    public function upload(Request $request): \Illuminate\Http\JsonResponse
    {
        $file = $request->file('file');

        // 1. 检查文件是否存在
        if (!$file) {
            return Result::error(400, '请选择上传的文件');
        }

        // 2. 检查文件类型是否为图片
        $allowedMimeTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/webp'];
        $fileMimeType = $file->getMimeType();

        if (!in_array($fileMimeType, $allowedMimeTypes)) {
            return Result::error(400, '只能上传图片文件（支持格式：JPEG、PNG、GIF、BMP、WebP）');
        }

        // 3. 检查文件扩展名是否为图片
        $allowedExtensions = ['jpeg', 'jpg', 'png', 'gif', 'bmp', 'webp'];
        $fileExtension = $file->getClientOriginalExtension();

        if (!in_array(strtolower($fileExtension), $allowedExtensions)) {
            return Result::error(400, '只能上传图片文件（支持格式：JPEG、PNG、GIF、BMP、WebP）');
        }

        // 4. 设置文件存储路径
        $filePath = 'storage/' . date('Ymd');
        $newFileName = Str::random(16) . '_' . $file->getClientOriginalName();

        // 5. 创建目录（如果不存在）
        if (!file_exists(public_path($filePath))) {
            mkdir(public_path($filePath), 0777, true);
        }

        // 6. 移动文件到目标路径
        $file->move(public_path($filePath), $newFileName);

        // 7. 返回文件 URL
        return Result::success([
            'url' => env('APP_URL') . '/' . $filePath . '/' . $newFileName
        ]);
    }
}
